Dapper, a Large-Scale Distributed Systems Tracing Ingrastructure
背景
近年のインターネットサービスは、大規模で複雑な分散システムであり、複数のソフトウェアモジュール から構成される
ソフトウェアモジュールは、異なるチーム、異なる言語、異なる物理設備 で動作している可能性がある
パフォーマンスの問題を解決するために、システム全体の振る舞いを理解するための支援ツールが必要
Daper: 複雑な分散システムの振る舞いに関する情報を Google の開発者に提供するためのツール
ユニバーサル検索の例
1回の検索クエリの処理のために、数千のマシンおよびサービスによる処理が必要になる
検索システムにおいて、ユーザはその遅延に敏感になる
裏で動くサービスの内1つでも遅延していれば、全体の遅延に繋がる
エンジニアは、全体のレイテンシを観測して問題があることはわかるが、どのサービスがなぜ問題なのかまではわからない
エンジニアは、どのサービスが利用されているかわからない。日々利用されているサービスはパフォーマンス向上等のために変化しているため
エンジニアは、すべてのサービスの内容に詳しくない。他のチームが担当しているサービスの内部の詳細はわからない
サービスやマシンが数多くの異なるクライアントに共有されている可能性がある。パフォーマンスの問題は別のアプリケーションによって引き起こされているかもしれない
Dapper の要件
Dapper への基本的な要件
Ubiquitous deployment (普遍的, 一様なデプロイ)
システムのほんの一部がモニタリングされていなければ、インフラのトレーシングの利点が損なわれてしまうため、普遍的にデプロイを行う必要がある
Continuous Monitoring (継続したモニタリング)
非正常、あるいは特徴的なシステムの振る舞いは、大抵その再現が困難あるいは不可能であるため、常に監視し続ける必要がある
Dapper への具体的な要件
Low overhead: サービスのパフォーマンスに影響を与えない
Application-level transparency: アプリケーションの開発者がトレーシングを意識しない
Scalability: Google のシステム規模に適応できる
加えて、トレーシングデータが素早く参照できること (異常に素早く対処できるようにするため)
分散トレーシングの方法
シンプルな分散トレーシングの方法は、各サーバで送受信したメッセージのタイムスタンプおよびメッセージIDを収集すること black-box
メッセージレコードに追加情報を与えない
統計回帰分析 (statistical regression techniques) を利用して関連を見出す
annotation-based
全てのメッセージレコードに、グローバルに一意なタグを与える
black-box はより手軽だが、より多量のデータが必要になる
annotation-based はタグを生成、埋め込む instrument プログラムを用意する必要がある
Google では全てのアプリケーションが同様のスレッディングモデル、制御フローおよび RPC システムを利用していたので、instrumentation は少数のライブラリに依存させるだけで済んだし、アプリケーション開発者に対して透過的にシステムをモニタリングすることが可能だった
Dapper の全体像
Tree, Trace
トレーシングのツリー
ノードとして Span をもつ
Span
トレーシングのツリーにおけるノード
実態は、タイムスタンプのついたシンプルなログ
span の開始/終了時刻, RPC 時刻データ, 0 以上のアプリケーション特有の annotation をエンコードしたもの
木構造において、エッジで隣接した親ノードは Parent Span。Parent Span を持たない Span は Root Span
内容
parent id: Parent Span の span id
span id: Span を一意に識別する ID
trace id: 確率的に一意な 64-bit の数値。ツリー内の全ての Span が同一の値をもつ
https://gyazo.com/8df61dcd82ef8c8c574fee2cfe7702e7https://gyazo.com/19e6ce711b5a86f0e7ea606c662ac8c7
さらに、1 つの Span の記録内容を細かくみると以下のようになる。foo はアプリケーション固有に設定された annotation。annotation は、アプリケーションから能動的に Span に書き込みを行いたいときに利用できる。
https://gyazo.com/f7a813364dd9a1397f1ec16947dba4c9
図は下記、Google の論文より引用
Sigelman, Benjamin H., et al. Dapper, a large-scale distributed systems tracing infrastructure. Technical report, Google, Inc, 2010.